// MCP工具类封装
// 负责与MCP（Model Control Panel）API进行交互

/**
 * MCP工具类
 */
export const MCP = {
  // MCP基础URL和API版本
  BASE_URL: 'https://api.modelbest.cn',
  API_VERSION: 'v1',
  
  // 存储MCP API密钥的键名
  MCP_API_KEY: 'mcp_api_key',
  
  // 默认模型配置
  DEFAULT_MODEL: 'qwen-max',
  DEFAULT_TEMPERATURE: 0.7,
  DEFAULT_MAX_TOKENS: 800,
  
  /**
   * 设置MCP API密钥
   * @param {string} apiKey - MCP API密钥
   */
  setApiKey(apiKey) {
    uni.setStorageSync(this.MCP_API_KEY, apiKey)
  },
  
  /**
   * 获取MCP API密钥
   * @returns {string|null} MCP API密钥
   */
  getApiKey() {
    return uni.getStorageSync(this.MCP_API_KEY) || null
  },
  
  /**
   * 发送聊天请求到MCP API
   * @param {string} message - 用户消息
   * @param {Array} history - 历史消息数组
   * @param {Object} options - 配置选项
   * @returns {Promise} 响应Promise
   */
  async chatCompletion(message, history = [], options = {}) {
    const apiKey = this.getApiKey()
    if (!apiKey) {
      return Promise.reject(new Error('MCP API密钥未设置'))
    }
    
    try {
      // 准备消息历史
      const messages = []
      
      // 添加系统消息
      messages.push({
        role: 'system',
        content: options.systemPrompt || '你是一个专业的教育咨询客服，为用户解答关于课程预约、会员服务、订单查询和退款等问题。你的回答应该简洁明了，态度友好，并提供实用的信息。'
      })
      
      // 添加历史消息
      if (history && history.length > 0) {
        history.forEach(item => {
          messages.push({
            role: item.type === 'user' ? 'user' : 'assistant',
            content: item.content
          })
        })
      }
      
      // 添加当前用户消息
      messages.push({
        role: 'user',
        content: message
      })
      
      // 发送请求
      const response = await uni.request({
        url: `${this.BASE_URL}/${this.API_VERSION}/chat/completions`,
        method: 'POST',
        header: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${apiKey}`
        },
        data: {
          model: options.model || this.DEFAULT_MODEL,
          messages: messages,
          temperature: options.temperature || this.DEFAULT_TEMPERATURE,
          max_tokens: options.maxTokens || this.DEFAULT_MAX_TOKENS
        }
      })
      
      // 处理响应
      if (response.statusCode === 200 && response.data) {
        return response.data
      } else {
        throw new Error(response.data?.error?.message || '请求失败')
      }
    } catch (error) {
      console.error('MCP API请求失败:', error)
      throw error
    }
  },
  
  /**
   * 检查API密钥是否有效
   * @returns {Promise<boolean>} 密钥是否有效
   */
  async validateApiKey() {
    try {
      // 发送简单请求以验证API密钥
      const response = await this.chatCompletion('测试消息', [], {
        maxTokens: 10
      })
      return true
    } catch (error) {
      console.error('API密钥验证失败:', error)
      return false
    }
  }
}

export default MCP 